package org.springframework.beans.factory;

import org.springframework.beans.BeansException;

/**
 * @Name BeanFactory
 * @Description: Bean 容器接口
 * 描述信息：定义获取 Bean 实例的接口。
 * 提示：只有向 Bean 容器中注册 BeanDefinition 后，使用 Bean 时才会被实例化。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-13 17:08:04
 **/
public interface BeanFactory {

    /**
     * 获取 Bean 实例
     *
     * @param name Bean 实例名称
     * @return java.lang.Object Bean 实例
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-14 14:35:15+
     */
    Object getBean(String name) throws BeansException;

    /**
     * 获取 Bean 实例
     *
     * @param requiredType Bean 实例类型
     * @return T Bean 实例
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-10 16:41:02
     */
    <T> T getBean(Class<T> requiredType) throws BeansException;

    /**
     * 获取 Bean 实例
     *
     * @param name         Bean 实例名称
     * @param requiredType Bean 实例类型
     * @return T Bean 实例
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 15:50:22
     */
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

}

